#ifndef __D3D10_SWIG_H
#define __D3D10_SWIG_H

#include "mstypes.i"
#include "IUnknown_swig.h"
#include "IDXGI_swig.h"
#include "D3D11_swig.h"

class ID3D10Device;

enum D3D10_USAGE
{	D3D10_USAGE_DEFAULT	= 0,
D3D10_USAGE_IMMUTABLE	= 1,
D3D10_USAGE_DYNAMIC	= 2,
D3D10_USAGE_STAGING	= 3
};

typedef 
enum D3D10_RTV_DIMENSION
{	D3D10_RTV_DIMENSION_UNKNOWN	= 0,
D3D10_RTV_DIMENSION_BUFFER	= 1,
D3D10_RTV_DIMENSION_TEXTURE1D	= 2,
D3D10_RTV_DIMENSION_TEXTURE1DARRAY	= 3,
D3D10_RTV_DIMENSION_TEXTURE2D	= 4,
D3D10_RTV_DIMENSION_TEXTURE2DARRAY	= 5,
D3D10_RTV_DIMENSION_TEXTURE2DMS	= 6,
D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY	= 7,
D3D10_RTV_DIMENSION_TEXTURE3D	= 8
} 	D3D10_RTV_DIMENSION;

typedef 
enum D3D10_DSV_DIMENSION
{	D3D10_DSV_DIMENSION_UNKNOWN	= 0,
D3D10_DSV_DIMENSION_TEXTURE1D	= 1,
D3D10_DSV_DIMENSION_TEXTURE1DARRAY	= 2,
D3D10_DSV_DIMENSION_TEXTURE2D	= 3,
D3D10_DSV_DIMENSION_TEXTURE2DARRAY	= 4,
D3D10_DSV_DIMENSION_TEXTURE2DMS	= 5,
D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY	= 6
} 	D3D10_DSV_DIMENSION;



typedef 
enum D3D10_INPUT_CLASSIFICATION
{
	D3D10_INPUT_PER_VERTEX_DATA	= 0,
	D3D10_INPUT_PER_INSTANCE_DATA	= 1
} 	D3D10_INPUT_CLASSIFICATION;

typedef 
enum D3D10_BLEND
{	D3D10_BLEND_ZERO	= 1,
D3D10_BLEND_ONE	= 2,
D3D10_BLEND_SRC_COLOR	= 3,
D3D10_BLEND_INV_SRC_COLOR	= 4,
D3D10_BLEND_SRC_ALPHA	= 5,
D3D10_BLEND_INV_SRC_ALPHA	= 6,
D3D10_BLEND_DEST_ALPHA	= 7,
D3D10_BLEND_INV_DEST_ALPHA	= 8,
D3D10_BLEND_DEST_COLOR	= 9,
D3D10_BLEND_INV_DEST_COLOR	= 10,
D3D10_BLEND_SRC_ALPHA_SAT	= 11,
D3D10_BLEND_BLEND_FACTOR	= 14,
D3D10_BLEND_INV_BLEND_FACTOR	= 15,
D3D10_BLEND_SRC1_COLOR	= 16,
D3D10_BLEND_INV_SRC1_COLOR	= 17,
D3D10_BLEND_SRC1_ALPHA	= 18,
D3D10_BLEND_INV_SRC1_ALPHA	= 19
} 	D3D10_BLEND;

typedef 
enum D3D10_BLEND_OP
{	D3D10_BLEND_OP_ADD	= 1,
D3D10_BLEND_OP_SUBTRACT	= 2,
D3D10_BLEND_OP_REV_SUBTRACT	= 3,
D3D10_BLEND_OP_MIN	= 4,
D3D10_BLEND_OP_MAX	= 5
} 	D3D10_BLEND_OP;

typedef 
enum D3D10_DEPTH_WRITE_MASK
{	D3D10_DEPTH_WRITE_MASK_ZERO	= 0,
	D3D10_DEPTH_WRITE_MASK_ALL	= 1
} 	D3D10_DEPTH_WRITE_MASK;

typedef 
enum D3D10_COMPARISON_FUNC
{	D3D10_COMPARISON_NEVER	= 1,
D3D10_COMPARISON_LESS	= 2,
D3D10_COMPARISON_EQUAL	= 3,
D3D10_COMPARISON_LESS_EQUAL	= 4,
D3D10_COMPARISON_GREATER	= 5,
D3D10_COMPARISON_NOT_EQUAL	= 6,
D3D10_COMPARISON_GREATER_EQUAL	= 7,
D3D10_COMPARISON_ALWAYS	= 8
} 	D3D10_COMPARISON_FUNC;

typedef 
enum D3D10_STENCIL_OP
{	D3D10_STENCIL_OP_KEEP	= 1,
D3D10_STENCIL_OP_ZERO	= 2,
D3D10_STENCIL_OP_REPLACE	= 3,
D3D10_STENCIL_OP_INCR_SAT	= 4,
D3D10_STENCIL_OP_DECR_SAT	= 5,
D3D10_STENCIL_OP_INVERT	= 6,
D3D10_STENCIL_OP_INCR	= 7,
D3D10_STENCIL_OP_DECR	= 8
} 	D3D10_STENCIL_OP;

typedef 
enum D3D10_FILL_MODE
{	D3D10_FILL_WIREFRAME	= 2,
D3D10_FILL_SOLID	= 3
} 	D3D10_FILL_MODE;

typedef 
enum D3D10_CULL_MODE
{	D3D10_CULL_NONE	= 1,
D3D10_CULL_FRONT	= 2,
D3D10_CULL_BACK	= 3
} 	D3D10_CULL_MODE;

typedef 
enum D3D10_FILTER
{	D3D10_FILTER_MIN_MAG_MIP_POINT	= 0,
D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR	= 0x1,
D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT	= 0x4,
D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR	= 0x5,
D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT	= 0x10,
D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR	= 0x11,
D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT	= 0x14,
D3D10_FILTER_MIN_MAG_MIP_LINEAR	= 0x15,
D3D10_FILTER_ANISOTROPIC	= 0x55,
D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT	= 0x80,
D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR	= 0x81,
D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT	= 0x84,
D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR	= 0x85,
D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT	= 0x90,
D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR	= 0x91,
D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT	= 0x94,
D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR	= 0x95,
D3D10_FILTER_COMPARISON_ANISOTROPIC	= 0xd5,
D3D10_FILTER_TEXT_1BIT	= 0x80000000 
} 	D3D10_FILTER;

typedef 
enum D3D10_TEXTURE_ADDRESS_MODE
{	D3D10_TEXTURE_ADDRESS_WRAP	= 1,
D3D10_TEXTURE_ADDRESS_MIRROR	= 2,
D3D10_TEXTURE_ADDRESS_CLAMP	= 3,
D3D10_TEXTURE_ADDRESS_BORDER	= 4,
D3D10_TEXTURE_ADDRESS_MIRROR_ONCE	= 5
} 	D3D10_TEXTURE_ADDRESS_MODE;


typedef 
enum D3D10_QUERY
{	D3D10_QUERY_EVENT	= 0,
D3D10_QUERY_OCCLUSION	= ( D3D10_QUERY_EVENT + 1 ) ,
D3D10_QUERY_TIMESTAMP	= ( D3D10_QUERY_OCCLUSION + 1 ) ,
D3D10_QUERY_TIMESTAMP_DISJOINT	= ( D3D10_QUERY_TIMESTAMP + 1 ) ,
D3D10_QUERY_PIPELINE_STATISTICS	= ( D3D10_QUERY_TIMESTAMP_DISJOINT + 1 ) ,
D3D10_QUERY_OCCLUSION_PREDICATE	= ( D3D10_QUERY_PIPELINE_STATISTICS + 1 ) ,
D3D10_QUERY_SO_STATISTICS	= ( D3D10_QUERY_OCCLUSION_PREDICATE + 1 ) ,
D3D10_QUERY_SO_OVERFLOW_PREDICATE	= ( D3D10_QUERY_SO_STATISTICS + 1 ) 
} 	D3D10_QUERY;

typedef 
enum D3D10_COUNTER
{	D3D10_COUNTER_DEVICE_DEPENDENT_0	= 0x40000000
} 	D3D10_COUNTER;

typedef 
enum D3D10_COUNTER_TYPE
{	D3D10_COUNTER_TYPE_FLOAT32	= 0,
D3D10_COUNTER_TYPE_UINT16	= ( D3D10_COUNTER_TYPE_FLOAT32 + 1 ) ,
D3D10_COUNTER_TYPE_UINT32	= ( D3D10_COUNTER_TYPE_UINT16 + 1 ) ,
D3D10_COUNTER_TYPE_UINT64	= ( D3D10_COUNTER_TYPE_UINT32 + 1 ) 
} 	D3D10_COUNTER_TYPE;

typedef struct D3D10_BUFFER_DESC
{
	UINT ByteWidth;
	D3D10_USAGE Usage;
	UINT BindFlags;
	UINT CPUAccessFlags;
	UINT MiscFlags;
} 	D3D10_BUFFER_DESC;

typedef struct D3D10_TEXTURE1D_DESC
{
	UINT Width;
	UINT MipLevels;
	UINT ArraySize;
	DXGI_FORMAT Format;
	D3D10_USAGE Usage;
	UINT BindFlags;
	UINT CPUAccessFlags;
	UINT MiscFlags;
} 	D3D10_TEXTURE1D_DESC;


typedef struct D3D10_TEXTURE2D_DESC
{
	UINT Width;
	UINT Height;
	UINT MipLevels;
	UINT ArraySize;
	DXGI_FORMAT Format;
	DXGI_SAMPLE_DESC SampleDesc;
	D3D10_USAGE Usage;
	UINT BindFlags;
	UINT CPUAccessFlags;
	UINT MiscFlags;
} 	D3D10_TEXTURE2D_DESC;

typedef struct D3D10_TEXTURE3D_DESC
{
	UINT Width;
	UINT Height;
	UINT Depth;
	UINT MipLevels;
	DXGI_FORMAT Format;
	D3D10_USAGE Usage;
	UINT BindFlags;
	UINT CPUAccessFlags;
	UINT MiscFlags;
} 	D3D10_TEXTURE3D_DESC;

typedef struct D3D10_SUBRESOURCE_DATA
{
	const void *pSysMem;
	UINT SysMemPitch;
	UINT SysMemSlicePitch;
} 	D3D10_SUBRESOURCE_DATA;

typedef struct D3D10_BUFFER_SRV
{
	UINT FirstElement;
	UINT ElementOffset;
	UINT NumElements;
	UINT ElementWidth;
	
} 	D3D10_BUFFER_SRV;

typedef struct D3D10_TEX1D_SRV
{
	UINT MostDetailedMip;
	UINT MipLevels;
} 	D3D10_TEX1D_SRV;

typedef struct D3D10_TEX1D_ARRAY_SRV
{
	UINT MostDetailedMip;
	UINT MipLevels;
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX1D_ARRAY_SRV;

typedef struct D3D10_TEX2D_SRV
{
	UINT MostDetailedMip;
	UINT MipLevels;
} 	D3D10_TEX2D_SRV;

typedef struct D3D10_TEX2D_ARRAY_SRV
{
	UINT MostDetailedMip;
	UINT MipLevels;
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX2D_ARRAY_SRV;

typedef struct D3D10_TEX2DMS_SRV
{
	UINT UnusedField_NothingToDefine;
} 	D3D10_TEX2DMS_SRV;
/////////////Maniall check to here



typedef struct D3D10_TEX2DMS_ARRAY_SRV
{
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX2DMS_ARRAY_SRV;

typedef struct D3D10_TEX3D_SRV
{
	UINT MostDetailedMip;
	UINT MipLevels;
} 	D3D10_TEX3D_SRV;

typedef struct D3D10_TEXCUBE_SRV
{
	UINT MostDetailedMip;
	UINT MipLevels;
} 	D3D10_TEXCUBE_SRV;


typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC
{
	DXGI_FORMAT Format;
	D3D10_SRV_DIMENSION ViewDimension;

	D3D10_BUFFER_SRV Buffer;
	D3D10_TEX1D_SRV Texture1D;
	D3D10_TEX1D_ARRAY_SRV Texture1DArray;
	D3D10_TEX2D_SRV Texture2D;
	D3D10_TEX2D_ARRAY_SRV Texture2DArray;
	D3D10_TEX2DMS_SRV Texture2DMS;
	D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;
	D3D10_TEX3D_SRV Texture3D;
	D3D10_TEXCUBE_SRV TextureCube;
} 	D3D10_SHADER_RESOURCE_VIEW_DESC;




class ID3D10DeviceChild : public IUnknown
{
public:
	virtual void GetDevice(ID3D10Device** ppDevice) = 0;
	virtual HRESULT GetPrivateData(REFGUID guid, UINT *pDataSize, void *pData) = 0;
	virtual HRESULT SetPrivateData(REFGUID guid, UINT DataSize, const void *pData) = 0; 
	virtual HRESULT SetPrivateDataInterface(REFGUID guid, const IUnknown *pData ) = 0;
};


class ID3D10Resource : public ID3D10DeviceChild 
{
public:
	virtual UINT GetEvictionPriority() = 0;
	virtual void GetType(D3D10_RESOURCE_DIMENSION *rType) = 0;
	virtual void SetEvictionPriority(UINT EvictionPriority) = 0;
};

class ID3D10Buffer : public ID3D10Resource
{
public:
	virtual void GetDesc( D3D10_BUFFER_DESC *pDesc) = 0;
};

class ID3D10Texture2D : public ID3D10Resource
{
public:
	virtual void GetDesc(D3D10_TEXTURE2D_DESC *pDesc) = 0; 
};

class ID3D10Texture3D : public ID3D10Resource
{
public:
	virtual void GetDesc(D3D10_TEXTURE3D_DESC *pDesc) = 0; 
};

class ID3D10View : public ID3D10DeviceChild
{
public:
	virtual void GetResource(ID3D10Resource **ppResource ) = 0;
};

class ID3D10ShaderResourceView : public ID3D10View
{
public:
	virtual void GetDesc( D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc) = 0;

};

typedef struct D3D10_BUFFER_RTV
{
	UINT FirstElement;
	UINT ElementOffset;
	UINT NumElements;
	UINT ElementWidth;
} 	D3D10_BUFFER_RTV;
typedef struct D3D10_TEX1D_RTV
{
	UINT MipSlice;
} 	D3D10_TEX1D_RTV;

typedef struct D3D10_TEX1D_ARRAY_RTV
{
	UINT MipSlice;
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX1D_ARRAY_RTV;

typedef struct D3D10_TEX2D_RTV
{
	UINT MipSlice;
} 	D3D10_TEX2D_RTV;

typedef struct D3D10_TEX2D_ARRAY_RTV
{
	UINT MipSlice;
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX2D_ARRAY_RTV;

typedef struct D3D10_TEX2DMS_RTV
{
	UINT UnusedField_NothingToDefine;
} 	D3D10_TEX2DMS_RTV;

typedef struct D3D10_TEX2DMS_ARRAY_RTV
{
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX2DMS_ARRAY_RTV;


typedef struct D3D10_TEX3D_RTV
{
	UINT MipSlice;
	UINT FirstWSlice;
	UINT WSize;
} 	D3D10_TEX3D_RTV;

typedef struct D3D10_RENDER_TARGET_VIEW_DESC
{
	DXGI_FORMAT Format;
	D3D10_RTV_DIMENSION ViewDimension;

	D3D10_BUFFER_RTV Buffer;
	D3D10_TEX1D_RTV Texture1D;
	D3D10_TEX1D_ARRAY_RTV Texture1DArray;
	D3D10_TEX2D_RTV Texture2D;
	D3D10_TEX2D_ARRAY_RTV Texture2DArray;
	D3D10_TEX2DMS_RTV Texture2DMS;
	D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray;
	D3D10_TEX3D_RTV Texture3D;

} 	D3D10_RENDER_TARGET_VIEW_DESC;


class ID3D10RenderTargetView : public ID3D10View
{
public:
	virtual void GetDesc( D3D10_RENDER_TARGET_VIEW_DESC *pDesc) = 0;

};
typedef struct D3D10_TEX1D_DSV
{
	UINT MipSlice;
} 	D3D10_TEX1D_DSV;


typedef struct D3D10_TEX1D_ARRAY_DSV
{
	UINT MipSlice;
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX1D_ARRAY_DSV;

typedef struct D3D10_TEX2D_DSV
{
	UINT MipSlice;
} 	D3D10_TEX2D_DSV;

typedef struct D3D10_TEX2D_ARRAY_DSV
{
	UINT MipSlice;
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX2D_ARRAY_DSV;

typedef struct D3D10_TEX2DMS_DSV
{
	UINT UnusedField_NothingToDefine;
} 	D3D10_TEX2DMS_DSV;

typedef struct D3D10_TEX2DMS_ARRAY_DSV
{
	UINT FirstArraySlice;
	UINT ArraySize;
} 	D3D10_TEX2DMS_ARRAY_DSV;

typedef struct D3D10_DEPTH_STENCIL_VIEW_DESC
{
	DXGI_FORMAT Format;
	D3D10_DSV_DIMENSION ViewDimension;
	
	D3D10_TEX1D_DSV Texture1D;
	D3D10_TEX1D_ARRAY_DSV Texture1DArray;
	D3D10_TEX2D_DSV Texture2D;
	D3D10_TEX2D_ARRAY_DSV Texture2DArray;
	D3D10_TEX2DMS_DSV Texture2DMS;
	D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray;
	
} 	D3D10_DEPTH_STENCIL_VIEW_DESC;

class ID3D10DepthStencilView : public ID3D10View
{
public:
	virtual void GetDesc( D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc) = 0;

};


typedef struct D3D10_INPUT_ELEMENT_DESC
{
	char* SemanticName;
	UINT SemanticIndex;
	DXGI_FORMAT Format;
	UINT InputSlot;
	UINT AlignedByteOffset;
	D3D10_INPUT_CLASSIFICATION InputSlotClass;
	UINT InstanceDataStepRate;
} 	D3D10_INPUT_ELEMENT_DESC;

class ID3D10InputLayout : public ID3D10DeviceChild
{


};


typedef struct D3D10_SO_DECLARATION_ENTRY
{
	char* SemanticName;
	UINT SemanticIndex;
	BYTE StartComponent;
	BYTE ComponentCount;
	BYTE OutputSlot;
} 	D3D10_SO_DECLARATION_ENTRY;


typedef struct D3D10_BLEND_DESC
{
	BOOL AlphaToCoverageEnable;
	BOOL BlendEnable[ 8 ];
	D3D10_BLEND SrcBlend;
	D3D10_BLEND DestBlend;
	D3D10_BLEND_OP BlendOp;
	D3D10_BLEND SrcBlendAlpha;
	D3D10_BLEND DestBlendAlpha;
	D3D10_BLEND_OP BlendOpAlpha;
	UINT8 RenderTargetWriteMask[ 8 ];
} 	D3D10_BLEND_DESC;

typedef struct D3D10_DEPTH_STENCILOP_DESC
{
	D3D10_STENCIL_OP StencilFailOp;
	D3D10_STENCIL_OP StencilDepthFailOp;
	D3D10_STENCIL_OP StencilPassOp;
	D3D10_COMPARISON_FUNC StencilFunc;
} 	D3D10_DEPTH_STENCILOP_DESC;

typedef struct D3D10_DEPTH_STENCIL_DESC
{
	BOOL DepthEnable;
	D3D10_DEPTH_WRITE_MASK DepthWriteMask;
	D3D10_COMPARISON_FUNC DepthFunc;
	BOOL StencilEnable;
	UINT8 StencilReadMask;
	UINT8 StencilWriteMask;
	D3D10_DEPTH_STENCILOP_DESC FrontFace;
	D3D10_DEPTH_STENCILOP_DESC BackFace;
} 	D3D10_DEPTH_STENCIL_DESC;

class ID3D10DepthStencilState : public ID3D10DeviceChild
{
public:
	virtual void GetDesc(D3D10_DEPTH_STENCIL_DESC *pDesc) = 0;

};

typedef struct D3D10_RASTERIZER_DESC
{
	D3D10_FILL_MODE FillMode;
	D3D10_CULL_MODE CullMode;
	BOOL FrontCounterClockwise;
	INT DepthBias;
	FLOAT DepthBiasClamp;
	FLOAT SlopeScaledDepthBias;
	BOOL DepthClipEnable;
	BOOL ScissorEnable;
	BOOL MultisampleEnable;
	BOOL AntialiasedLineEnable;
} 	D3D10_RASTERIZER_DESC;

class ID3D10RasterizerState : public ID3D10DeviceChild
{
public:
	virtual void GetDesc( D3D10_RASTERIZER_DESC *pDesc) = 0;

};

typedef struct D3D10_SAMPLER_DESC
{
	D3D10_FILTER Filter;
	D3D10_TEXTURE_ADDRESS_MODE AddressU;
	D3D10_TEXTURE_ADDRESS_MODE AddressV;
	D3D10_TEXTURE_ADDRESS_MODE AddressW;
	FLOAT MipLODBias;
	UINT MaxAnisotropy;
	D3D10_COMPARISON_FUNC ComparisonFunc;
	FLOAT BorderColor[ 4 ];
	FLOAT MinLOD;
	FLOAT MaxLOD;
} 	D3D10_SAMPLER_DESC;
class ID3D10SamplerState : public ID3D10DeviceChild
{
public:
	virtual void GetDesc( D3D10_SAMPLER_DESC *pDesc) = 0;
};
typedef struct D3D10_QUERY_DESC
{
	D3D10_QUERY Query;
	UINT MiscFlags;
} 	D3D10_QUERY_DESC;

class ID3D10Asynchronous : public ID3D10DeviceChild
{
public:
	UINT GetDataSize() = 0;
};

class ID3D10Query : public ID3D10Asynchronous
{
public:
	virtual void GetDesc( D3D10_QUERY_DESC *pDesc) = 0;
};

class ID3D10Predicate : public ID3D10Query
{
public:

};

typedef struct D3D10_COUNTER_DESC
{
	D3D10_COUNTER Counter;
	UINT MiscFlags;
} 	D3D10_COUNTER_DESC;

class ID3D10Counter : public ID3D10Asynchronous
{
public:
	virtual void GetDesc( D3D10_COUNTER_DESC *pDesc	);
};

typedef struct D3D10_COUNTER_INFO
{
	D3D10_COUNTER LastDeviceDependentCounter;
	UINT NumSimultaneousCounters;
	UINT8 NumDetectableParallelUnits;
} 	D3D10_COUNTER_INFO;

class ID3D10VertexShader : public ID3D10DeviceChild
{
public:

};

class ID3D10PixelShader : public ID3D10DeviceChild
{

};



class ID3D10GeometryShader : public ID3D10DeviceChild
{
public:

};


typedef struct D3D10_VIEWPORT
{
	INT TopLeftX;
	INT TopLeftY;
	UINT Width;
	UINT Height;
	FLOAT MinDepth;
	FLOAT MaxDepth;
} 	D3D10_VIEWPORT;

typedef RECT D3D10_RECT;
typedef D3D_PRIMITIVE_TOPOLOGY D3D10_PRIMITIVE_TOPOLOGY;

class ID3D10Device : public IUnknown
{
public:
	virtual HRESULT SetExceptionMode( UINT RaiseFlags) = 0;
	virtual UINT GetExceptionMode( void) = 0;
	virtual UINT GetCreationFlags( void) = 0;
	virtual HRESULT GetDeviceRemovedReason( void) = 0;
	virtual HRESULT CreateBuffer( const D3D10_BUFFER_DESC *pDesc, const D3D10_SUBRESOURCE_DATA *pInitialData,
		ID3D10Buffer **ppBuffer) = 0;
	virtual HRESULT CreateTexture1D( const D3D10_TEXTURE1D_DESC *pDesc, const D3D10_SUBRESOURCE_DATA *pInitialData,
		ID3D10Texture1D **ppTexture1D) = 0;
	virtual HRESULT CreateTexture2D( const D3D10_TEXTURE2D_DESC *pDesc,
		const D3D10_SUBRESOURCE_DATA *pInitialData, ID3D10Texture2D **ppTexture2D) = 0;
	virtual HRESULT CreateTexture3D( const D3D10_TEXTURE3D_DESC *pDesc, const D3D10_SUBRESOURCE_DATA *pInitialData,
		ID3D10Texture3D **ppTexture3D) = 0;
	virtual HRESULT CreateShaderResourceView( ID3D10Resource *pResource, const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc,
		ID3D10ShaderResourceView **ppSRView) = 0;
	virtual HRESULT CreateRenderTargetView( ID3D10Resource *pResource, const D3D10_RENDER_TARGET_VIEW_DESC *pDesc,
		ID3D10RenderTargetView **ppRTView) = 0;
	virtual HRESULT CreateDepthStencilView( ID3D10Resource *pResource, const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc,
		ID3D10DepthStencilView **ppDepthStencilView) = 0;

	virtual HRESULT CreateInputLayout( const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs, UINT NumElements,
		const void *pShaderBytecodeWithInputSignature, UINT BytecodeLength, ID3D10InputLayout **ppInputLayout) = 0;
	virtual HRESULT CreateVertexShader( const void *pShaderBytecode, UINT BytecodeLength, ID3D10VertexShader **ppVertexShader) = 0;
	virtual HRESULT CreateGeometryShader( const void *pShaderBytecode, UINT BytecodeLength, ID3D10GeometryShader **ppGeometryShader) = 0;
	virtual HRESULT CreateGeometryShaderWithStreamOutput( const void *pShaderBytecode, SIZE_T BytecodeLength,
		 const D3D10_SO_DECLARATION_ENTRY *pSODeclaration, UINT NumEntries, UINT OutputStreamStride, ID3D10GeometryShader **ppGeometryShader) = 0;
	virtual HRESULT CreatePixelShader( const void *pShaderBytecode, UINT BytecodeLength, ID3D10PixelShader **ppPixelShader) = 0;
	virtual HRESULT CreateBlendState( const D3D10_BLEND_DESC *pBlendStateDesc, ID3D10BlendState **ppBlendState) = 0;
	virtual HRESULT CreateDepthStencilState( const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc, ID3D10DepthStencilState **ppDepthStencilState) = 0;
	virtual HRESULT CreateRasterizerState( const D3D10_RASTERIZER_DESC *pRasterizerDesc, ID3D10RasterizerState **ppRasterizerState) = 0;
	virtual HRESULT CreateSamplerState( const D3D10_SAMPLER_DESC *pSamplerDesc, ID3D10SamplerState **ppSamplerState) = 0;

	virtual HRESULT CreateQuery( const D3D10_QUERY_DESC *pQueryDesc, ID3D10Query **ppQuery) = 0;

	virtual HRESULT CreatePredicate( const D3D10_QUERY_DESC *pPredicateDesc, ID3D10Predicate **ppPredicate) = 0;

	virtual HRESULT CreateCounter( const D3D10_COUNTER_DESC *pCounterDesc, ID3D10Counter **ppCounter) = 0;
	virtual HRESULT CheckFormatSupport( DXGI_FORMAT Format, UINT *pFormatSupport) = 0;

	virtual HRESULT CheckMultisampleQualityLevels( DXGI_FORMAT Format, UINT SampleCount, UINT *pNumQualityLevels) = 0;
	virtual void CheckCounterInfo( D3D10_COUNTER_INFO *pCounterInfo) = 0;
	virtual HRESULT CheckCounter( const D3D10_COUNTER_DESC *pDesc, D3D10_COUNTER_TYPE *pType, UINT *pActiveCounters,
		char* szName, UINT *pNameLength, char* szUnits, UINT *pUnitsLength, char* szDescription, UINT *pDescriptionLength) = 0;
	virtual HRESULT OpenSharedResource(HANDLE hResource, REFIID ReturnedInterface, void **ppResource) = 0;





	virtual void VSSetConstantBuffers( UINT StartSlot, UINT NumBuffers, ID3D10Buffer *const *ppConstantBuffers) = 0;
	virtual void PSSetShaderResources( UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0;
	virtual void PSSetShader( ID3D10PixelShader *pPixelShader) = 0;
	virtual void PSSetSamplers( UINT StartSlot, UINT NumSamplers, ID3D10SamplerState *const *ppSamplers) = 0;
	virtual void VSSetShader( ID3D10VertexShader *pVertexShader) = 0;
	virtual void DrawIndexed( UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation) = 0;
	virtual void Draw( UINT VertexCount, UINT StartVertexLocation) = 0;
	virtual void PSSetConstantBuffers( UINT StartSlot, UINT NumBuffers, ID3D10Buffer *const *ppConstantBuffers) = 0;
	virtual void IASetInputLayout( ID3D10InputLayout *pInputLayout) = 0;
	virtual void IASetVertexBuffers( UINT StartSlot, UINT NumBuffers,ID3D10Buffer *const *ppVertexBuffers, const UINT *pStrides, const UINT *pOffsets) = 0;
	virtual void IASetIndexBuffer( ID3D10Buffer *pIndexBuffer, DXGI_FORMAT Format, UINT Offset) = 0;
	virtual void DrawIndexedInstanced( UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, INT BaseVertexLocation, UINT StartInstanceLocation) = 0;
	virtual void DrawInstanced( UINT VertexCountPerInstance, UINT InstanceCount, UINT StartVertexLocation, UINT StartInstanceLocation) = 0;
	virtual void GSSetConstantBuffers(  UINT StartSlot, UINT NumBuffers, ID3D10Buffer *const *ppConstantBuffers) = 0;
	virtual void GSSetShader( ID3D10GeometryShader *pShader) = 0;
	virtual void IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY Topology) = 0;
	virtual void VSSetShaderResources( UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0;
	virtual void VSSetSamplers( UINT StartSlot, UINT NumSamplers, ID3D10SamplerState *const *ppSamplers) = 0;
	virtual void SetPredication( ID3D10Predicate *pPredicate, BOOL PredicateValue) = 0;
	virtual void GSSetShaderResources( UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0;
	virtual void GSSetSamplers( UINT StartSlot, UINT NumSamplers, ID3D10SamplerState *const *ppSamplers) = 0;
	virtual void OMSetRenderTargets( UINT NumViews, ID3D10RenderTargetView *const *ppRenderTargetViews, ID3D10DepthStencilView *pDepthStencilView) = 0;
	virtual void OMSetBlendState( ID3D10BlendState *pBlendState, const FLOAT BlendFactor[4], UINT SampleMask) = 0;
	virtual void OMSetDepthStencilState( ID3D10DepthStencilState *pDepthStencilState, UINT StencilRef) = 0;
	virtual void SOSetTargets( UINT NumBuffers, ID3D10Buffer *const *ppSOTargets, const UINT *pOffsets) = 0;
	virtual void DrawAuto( void) = 0;
	virtual void RSSetState( ID3D10RasterizerState *pRasterizerState) = 0;
	virtual void RSSetViewports( UINT NumViewports, const D3D10_VIEWPORT *pViewports) = 0;
	virtual void RSSetScissorRects( UINT NumRects, const D3D10_RECT *pRects) = 0;
	virtual void CopySubresourceRegion( ID3D10Resource *pDstResource, UINT DstSubresource, UINT DstX, UINT DstY, UINT DstZ,
		ID3D10Resource *pSrcResource, UINT SrcSubresource, const D3D10_BOX *pSrcBox) = 0;
	virtual void CopyResource( ID3D10Resource *pDstResource, ID3D10Resource *pSrcResource) = 0;
	virtual void UpdateSubresource( ID3D10Resource *pDstResource, UINT DstSubresource,
		const D3D10_BOX *pDstBox, const void *pSrcData, UINT SrcRowPitch, UINT SrcDepthPitch) = 0;
	virtual void ClearRenderTargetView( ID3D10RenderTargetView *pRenderTargetView, const FLOAT ColorRGBA[ 4 ]) = 0;
	virtual void ClearDepthStencilView( ID3D10DepthStencilView *pDepthStencilView, UINT ClearFlags,
		FLOAT Depth, UINT8 Stencil) = 0;
	virtual void GenerateMips( ID3D10ShaderResourceView *pShaderResourceView) = 0;
	virtual void ResolveSubresource( ID3D10Resource *pDstResource, UINT DstSubresource,
		ID3D10Resource *pSrcResource, UINT SrcSubresource, DXGI_FORMAT Format) = 0;
	virtual void VSGetConstantBuffers( UINT StartSlot, UINT NumBuffers, ID3D10Buffer **ppConstantBuffers) = 0;
	virtual void PSGetShaderResources( UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView **ppShaderResourceViews) = 0;
	virtual void PSGetShader( ID3D10PixelShader **ppPixelShader) = 0;
	virtual void PSGetSamplers( UINT StartSlot, UINT NumSamplers, ID3D10SamplerState **ppSamplers) = 0;
	virtual void VSGetShader( ID3D10VertexShader **ppVertexShader) = 0;
	virtual void PSGetConstantBuffers( UINT StartSlot, UINT NumBuffers, ID3D10Buffer **ppConstantBuffers) = 0;
	virtual void IAGetInputLayout( ID3D10InputLayout **ppInputLayout) = 0;
	virtual void IAGetVertexBuffers( UINT StartSlot, UINT NumBuffers, ID3D10Buffer **ppVertexBuffers,
		UINT *pStrides, UINT *pOffsets) = 0;
	virtual void IAGetIndexBuffer( ID3D10Buffer **pIndexBuffer, DXGI_FORMAT *Format, UINT *Offset) = 0;
	virtual void GSGetConstantBuffers( UINT StartSlot, UINT NumBuffers, ID3D10Buffer **ppConstantBuffers) = 0;
	virtual void GSGetShader( ID3D10GeometryShader **ppGeometryShader) = 0;
	virtual void IAGetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY *pTopology) = 0;
	virtual void VSGetShaderResources( UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView **ppShaderResourceViews) = 0;
	virtual void VSGetSamplers( UINT StartSlot, UINT NumSamplers, ID3D10SamplerState **ppSamplers) = 0;
	virtual void GetPredication( ID3D10Predicate **ppPredicate, BOOL *pPredicateValue) = 0;
	virtual void GSGetShaderResources( UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView **ppShaderResourceViews) = 0;
	virtual void GSGetSamplers( UINT StartSlot, UINT NumSamplers, ID3D10SamplerState **ppSamplers) = 0;
	virtual void OMGetRenderTargets( UINT NumViews, ID3D10RenderTargetView **ppRenderTargetViews,
		ID3D10DepthStencilView **ppDepthStencilView) = 0;
	virtual void OMGetBlendState( ID3D10BlendState **ppBlendState, FLOAT BlendFactor[ 4 ], UINT *pSampleMask) = 0;
	virtual void OMGetDepthStencilState( ID3D10DepthStencilState **ppDepthStencilState, UINT *pStencilRef) = 0;
	virtual void SOGetTargets( UINT NumBuffers, ID3D10Buffer **ppSOTargets, UINT *pOffsets) = 0;
	virtual void RSGetState( ID3D10RasterizerState **ppRasterizerState) = 0;
	virtual void RSGetViewports( UINT *NumViewports, D3D10_VIEWPORT *pViewports) = 0;
	virtual void RSGetScissorRects( UINT *NumRects, D3D10_RECT *pRects) = 0;
	virtual HRESULT GetPrivateData( REFGUID guid, UINT *pDataSize, void *pData) = 0;
	virtual HRESULT SetPrivateData( REFGUID guid, UINT DataSize, const void *pData) = 0;
	virtual HRESULT SetPrivateDataInterface( REFGUID guid, const IUnknown *pData) = 0;
	virtual void ClearState( void) = 0;
	virtual void Flush( void) = 0;
};








#endif